#include "face.hpp"

//initiale la couleur en rouge
Face::Face(Sommet* a, Sommet* b, Sommet* c)
{
	sommets.push_back(a);
	sommets.push_back(b);
	sommets.push_back(c);
	couleur.push_back(255);
	couleur.push_back(0);
	couleur.push_back(0);
	faces.resize(3);
}

std::vector<Sommet*> Face::getSommets() const
{
	return sommets;
}

Sommet* Face::getSommet(int index) const
{
	return sommets.at(index);
}

void Face::setCouleur(int r, int g, int b)
{
	couleur.clear();//pour etre sur que l'on met que trois case dans le tableau couleur
	couleur.push_back(r);
	couleur.push_back(g);
	couleur.push_back(b);
}

std::vector<int> Face::getCouleur() const
{
	return couleur;
}

std::vector<Face*> Face::getFaces()
{
	return faces; 
}
Face* Face::getFace(int index)
{
	return faces.at(index);
}
void Face::setFace(Face* f,int i)
{
	faces[i]=f;
}

int Face::getIndex(Sommet& s)
{
	for(int i=0;i<3;i++)
	{
		if(s == *(sommets.at(i)))
		{
			return i;
		}
	}
	return 0;
}

bool Face::operator==(const Face& s) const
{
	return (sommets==s.sommets && faces==s.faces);
}

std::ostream& operator<<(std::ostream& out, const Face& b)
{
	out<<"3 ";
	for(int i=0;i<3;i++)
	{
		out<<b.sommets[i]->getId()<<" ";
	}
	out<<b.couleur.at(0)<<" "<<b.couleur.at(1)<<" "<<b.couleur.at(2);
	return out;
}
